import { defineStore } from 'pinia'

/**
 * 应用全局状态管理
 * 包含主题设置、全局加载状态、引导状态等
 */
export const useAppStore = defineStore('app', {
  state: () => ({
    // 主题设置
    theme: {
      darkMode: false, // 深色模式
      followSystem: true // 跟随系统
    },
    
    // 全局加载状态
    loading: false,
    
    // 当前激活的底部标签
    activeTab: 'home',
    
    // 引导状态（记录各页面是否已显示过引导）
    guideStatus: {
      home: false,
      airplane: false,
      camp: false,
      video: false,
      my: false,
      productInfo: false
    },
    
    // 系统通知
    notifications: [],
    
    // 应用版本
    version: 'v1.2.3'
  }),
  
  getters: {
    // 是否为深色模式
    isDarkMode: (state) => {
      if (state.theme.followSystem) {
        // 检测系统深色模式
        return window.matchMedia('(prefers-color-scheme: dark)').matches
      }
      return state.theme.darkMode
    },
    
    // 获取未读通知数量
    unreadNotificationCount: (state) => {
      return state.notifications.filter(notification => !notification.read).length
    }
  },
  
  actions: {
    /**
     * 设置主题模式
     * @param {Boolean} isDark - 是否为深色模式
     */
    setDarkMode(isDark) {
      this.theme.darkMode = isDark
      this.theme.followSystem = false
    },
    
    /**
     * 设置跟随系统主题
     * @param {Boolean} follow - 是否跟随系统
     */
    setFollowSystem(follow) {
      this.theme.followSystem = follow
    },
    
    /**
     * 设置全局加载状态
     * @param {Boolean} status - 加载状态
     */
    setLoading(status) {
      this.loading = status
    },
    
    /**
     * 设置当前激活的标签页
     * @param {String} tab - 标签名称
     */
    setActiveTab(tab) {
      this.activeTab = tab
    },
    
    /**
     * 标记页面引导已显示
     * @param {String} page - 页面名称
     */
    markGuideShown(page) {
      if (this.guideStatus.hasOwnProperty(page)) {
        this.guideStatus[page] = true
      }
    },
    
    /**
     * 重置所有引导状态（用于测试）
     */
    resetAllGuides() {
      Object.keys(this.guideStatus).forEach(key => {
        this.guideStatus[key] = false
      })
    },
    
    /**
     * 添加通知
     * @param {Object} notification - 通知对象
     */
    addNotification(notification) {
      this.notifications.push({
        id: Date.now(),
        read: false,
        timestamp: new Date(),
        ...notification
      })
    },
    
    /**
     * 标记通知为已读
     * @param {Number} id - 通知ID
     */
    markNotificationRead(id) {
      const notification = this.notifications.find(n => n.id === id)
      if (notification) {
        notification.read = true
      }
    }
  }
})